home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac 1993 September / September 93.iso / Archives / Games / Strategy / Puzzle / GameMaster / GM Dev Kit / Rulebook Sources / Chess / ChessBoardSubs.p < prev    next >
Encoding:
Text File  |  1991-10-05  |  3.1 KB  |  120 lines  |  [TEXT/PJMM]

  1. unit ChessBoardSubs;
  2.  
  3. { ©1991 [RHS] and Quinn "The Eskimo" }
  4.  
  5. interface
  6.  
  7.     uses
  8.         ChessTypes;
  9.  
  10.     procedure InitBoard (var b: boardType);
  11.     procedure ClearBoardSet (var b: boardSet);
  12.     function FindCell (var game: gameRecord; pt: point; var where: boardCoord): boolean;
  13.     procedure GetRect (var game: gameRecord; where: boardCoord; var r: rect);
  14.     procedure GetPawningRect (var game: gameRecord; var r: rect);
  15.     function FindPiece (piece: pieceType; var b: boardType; var pos: boardCoord): boolean;
  16.  
  17. implementation
  18.  
  19.     procedure InitBoard (var b: boardType);
  20.         var
  21.             x: boardXNdx;
  22.             y: boardYNdx;
  23.     begin
  24.         for x := 0 to kBoardXMax do begin
  25.             for y := 0 to kBoardYMax do begin
  26.                 b[x, y].occupant := Oempty;
  27.                 b[x, y].colour := cellColour((x + y) mod 2);
  28.             end; { for }
  29.         end; { for }
  30.         for x := 0 to kBoardXMax do begin
  31.             b[x, 1].occupant := OpawnB;
  32.             b[x, 6].occupant := OpawnW;
  33.         end; { for }
  34.         b[0, 0].occupant := OrookB;
  35.         b[1, 0].occupant := OknightB;
  36.         b[2, 0].occupant := ObishopB;
  37.         b[3, 0].occupant := OqueenB;
  38.         b[4, 0].occupant := OkingB;
  39.         b[5, 0].occupant := ObishopB;
  40.         b[6, 0].occupant := OknightB;
  41.         b[7, 0].occupant := OrookB;
  42.         b[0, 7].occupant := OrookW;
  43.         b[1, 7].occupant := OknightW;
  44.         b[2, 7].occupant := ObishopW;
  45.         b[3, 7].occupant := OqueenW;
  46.         b[4, 7].occupant := OkingW;
  47.         b[5, 7].occupant := ObishopW;
  48.         b[6, 7].occupant := OknightW;
  49.         b[7, 7].occupant := OrookW;
  50.     end; { InitBoard }
  51.  
  52.     procedure ClearBoardSet (var b: boardSet);
  53.         var
  54.             x: boardXNdx;
  55.             y: boardYNdx;
  56.     begin
  57.         for x := 0 to kBoardXMax do begin
  58.             for y := 0 to kBoardYMax do begin
  59.                 b[x, y] := false;
  60.             end; { for }
  61.         end; { for }
  62.     end; { ClearBoardSet }
  63.  
  64.     function FindCell (var game: gameRecord; pt: point; var where: boardCoord): boolean;
  65.         var
  66.             tmpx, tmpy: integer;
  67.     begin
  68.         pt.h := pt.h - (game.boardXOrg + 1);
  69.         pt.v := pt.v - (game.boardYOrg + 1);
  70.         tmpx := pt.h div kCellXPitch;
  71.         tmpy := pt.v div kCellYPitch;
  72.         if (pt.h >= 0) and (pt.v >= 0) and (tmpx <= kBoardXMax) and (tmpy <= kBoardYMax) then begin
  73.             where.x := tmpx;
  74.             where.y := tmpy;
  75.             FindCell := true;
  76.         end
  77.         else begin
  78.             FindCell := false;
  79.         end; { if }
  80.     end; { FindCell }
  81.  
  82.     procedure GetRect (var game: gameRecord; where: boardCoord; var r: rect);
  83.     begin
  84.         r.top := game.boardYOrg + 1 + where.y * kCellYPitch;
  85.         r.left := game.boardXOrg + 1 + where.x * kCellXPitch;
  86.         r.bottom := r.top + kCellYSize;
  87.         r.right := r.left + kCellXSize;
  88.     end;
  89.  
  90.     procedure GetPawningRect (var game: gameRecord; var r: rect);
  91.         var
  92.             w: boardCoord;
  93.             where: boardCoord;
  94.     begin
  95.         where.x := kPawningX;
  96.         where.y := kPawningY;
  97.         GetRect(game, where, r);
  98.         r.right := r.right + kCellXPitch * 3;
  99.         InsetRect(r, -kPawningXBorder, -kPawningYBorder);
  100.     end; { GetPawningRect }
  101.  
  102.     function FindPiece (piece: pieceType; var b: boardType; var pos: boardCoord): boolean;
  103.         var
  104.             x: boardXNdx;
  105.             y: boardYNdx;
  106.     begin
  107.         for x := 0 to kBoardXMax do begin
  108.             for y := 0 to kBoardYMax do begin
  109.                 if b[x, y].occupant = piece then begin
  110.                     pos.x := x;
  111.                     pos.y := y;
  112.                     FindPiece := true;
  113.                     exit(FindPiece);
  114.                 end; { if }
  115.             end; { for }
  116.         end; { for }
  117.         FindPiece := false;
  118.     end; { FindPiece }
  119.  
  120. end. { ChessBoardSubs }